/**
 * @desc 对数字进行四舍五入处理。(roundNumber:0代表永远进一，10代表永远不进则是保留几位小数的意思)
 * @param value 需要进行四舍五入的数字。
 * @param decimalSize 指定的小数位数，默认为2。
 * @param roundNumber 四舍五入的阈值，默认为5。即如果最后一位大于等于此值，则进位。
 * @returns 四舍五入后的数字。
 * @throws 如果value不是有效的数字，则抛出TypeError。
 */
function roundNumber(value: number, decimalSize = 2, roundNumber = 5) {
  if (!Number.isInteger(decimalSize)) {
    throw new TypeError('decimalSize is not a right integer number')
  }
  if (decimalSize < 0) decimalSize = 0
  const curValue = Number(value)
  if (Number.isNaN(curValue)) {
    throw new TypeError('value is not a right number')
  }
  const expandNum = Math.pow(10, decimalSize + 1)
  let curValExpanded = curValue * expandNum
  const theLastNum = curValExpanded % 10 // theLastNum的都是没用的数
  if (theLastNum >= roundNumber) curValExpanded += 10
  return (curValExpanded - theLastNum) / expandNum
}

export default roundNumber
